package com.zjm.servlet.servlet10_safe;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author ZJM
 * @date 2024/4/19 22:40
 * Servlet线程安全问题
 * <p>
 * Servlet在访问之后，会执行实例化，创建Servlet对象，而且我们的Tomcat容器可以同时多线程并发访问一个Servlet,
 * 如果在方法中对成员变量做修改操作，就有线程安全问题。
 *
 * 使用synchronized解决线程安全问题，但是效率低
 */
@WebServlet("/safe1")
public class Safe01Servlet extends HttpServlet {
    private String message = ""; //使用全局变量产生线程安全问题

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // message = "登录成功";
        // resp.getWriter().println(message);
        synchronized (this) {  //1.使用synchronized解决线程安全问题，但是效率低
            message = "登录成功";
            resp.getWriter().println(message);
        }
    }
}
